import QtQuick
import QtQuick.Controls

ApplicationWindow {
    id: root
    width: 1200
    height: 600
    visible: true
    title: qsTr("视频会议")  // 设置窗口标题

    // 全局属性
    property string serverIp: ""      // 服务器IP地址
    property string serverPort: ""    // 服务器端口号
    property string nowIp: ""         // 当前IP地址
    property string nowPort: ""       // 当前端口号

    // 动态加载器 - 用于切换不同界面
    Loader {
        id: mainLoader
        anchors.fill: parent          // 填充整个父窗口
        source: "LoginScreen.qml"     // 初始加载登录界面
    }

    // 显示注册界面函数
    function showRegisterScreen() {
        mainLoader.source = "RegisterScreen.qml"
    }

    // 显示登录界面函数
    function showLoginScreen() {
        mainLoader.source = "LoginScreen.qml"
    }

    // 组件完成时初始化
    Component.onCompleted: {
        // 调试输出，检查C++后端对象是否正常注册
        console.log("networkManager 类型:", typeof networkManager)
        console.log("networkManager 对象:", networkManager)
        console.log("userDatabase 类型:", typeof userDatabase)
        console.log("userDatabase 对象:", userDatabase)

        // 连接视频帧接收信号
        networkManager.videoFrameReceived.connect(function(frame) {
            // 如果当前界面有处理远程视频帧的方法，则调用
            if (mainLoader.item && mainLoader.item.handleRemoteVideoFrame) {
                mainLoader.item.handleRemoteVideoFrame(frame)
            }
        })

        // 连接连接状态变化信号
        networkManager.connectionStatusChanged.connect(function(connected) {
            console.log("Connection status:", connected)
        })

        // 连接错误发生信号
        networkManager.errorOccurred.connect(function(error) {
            console.log("Error:", error)
        })
    }

    // 切换到聊天界面函数
    function showChatScreen() {
        mainLoader.source = "ChatScreen.qml"
    }

    // 切换到创建/加入会议界面函数
    function showStartScreen() {
        mainLoader.source = "StartScreen.qml"
    }

    // 切换到连接服务器界面函数
    function showConnectScreen() {
        mainLoader.source = "ConnectScreen.qml"
    }

    // 创建会议（启动服务器）函数
    function createMeeting() {
        // 设置当前用户名为服务器主机
        networkManager.setUsername("会议主持")
        // 尝试在端口10000启动服务器
        if (networkManager.startServer(10000)) {
            serverIp = "localhost"    // 设置服务器IP为本地
            serverPort = "10000"      // 设置服务器端口
            showChatScreen()          // 切换到聊天界面
        }
    }

    // 加入会议（连接服务器）函数
    function joinMeeting(ip, port) {
        // 尝试连接到指定IP和端口的服务器
        if (networkManager.startClient(ip, parseInt(port))) {
            serverIp = ip             // 保存服务器IP
            serverPort = port         // 保存服务器端口
            showChatScreen()          // 切换到聊天界面
        }
    }

    // 发送消息函数
    function sendMessage(message) {
        networkManager.sendMessage(message)  // 通过网络管理器发送消息
    }
}
